<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script> 
        // const obj1 ={}
        // const obj2 ={}
        // const map = new Map()
        
        // map.set(obj1, '张三')
        // map.set(obj2, '李四')

        // console.log(map)

        //验证Map是引用数据类型
        // let map = new Map()
        // let res = map instanceof Map
        // //调用原型链顶端toString方法

        // /* 调用原型链顶端toString方法的原因，是因为数组和对象对toString的方法进行改写。
        // （使用顶端是不容易发生toString的覆盖） */
        // let resMap = Object.prototype.toString.call(map)
        // console.log(res); //输出结果为true
        // console.log(resMap); //输出结果为[object Map]

        //接收数组， 表示键值对的数组

        //     let m = new Map(
        //     [
        //         ['name', '曹操'],
        //         [{name: '曹操'}, '枭雄']
        //     ]
        // )
        //     console.log(m.get('name'))


        //     console.log(m.get({name:'曹操'}))

        //     console.log({} == {}) //false 该指向的是不同的堆

        //获取到'枭雄'的方式
        let obj = {name: '曹操'}
        let m = new Map(
        [
            ['name', '曹操'],
            [obj, '枭雄']
        ]
    )
        console.log(m.get('name'))


        console.log(m.get(obj))

        //Map内部机制
        const items = [
            ['name', '曹操']
        ]

        const myMap = new Map()
        items.forEach( //使用forEach进行遍历时下面的[key, value]=上面的['name', '曹操']
            ([key, value]) => myMap.set(key, value)
        )



        
    </script>
</body>
</html>